// 采用 call 来调用一个函数

function welcome( name ){
    console.log( `欢迎${name}莅临云创动力指导工作`);
    console.log( this );
}

// 非严格模式下，如果采用 call 调用函数时，
// 如果 call 的第一个参数为 null 或 undefined ，
// 则 welcome 函数内 this 表示 globalThis
welcome.call( null , '任丽' );

let p = { id: 1 , name: '张劲松' , gender: '靓仔' }
welcome.call( p , '张总' );

function hello( name ){
    'use strict';
    console.log( `欢迎${name}莅临云创动力指导工作`);
    console.log( this );
}

// 严格模式下，采用 call 调用函数时，
// 如果 call 的第一个参数为 null 则 hello 函数内 this 为 null
// 如果 call 的第一个参数为 undefined 则 hello 函数内 this 为 undefined
hello.call( null , '任丽' );

let q = { id: 2 , name: '吴晓龙' , gender: '靓仔' }
hello.call( q , '吴总' );

// 任务: 测试 apply 和 bind 方式调用函数
// 任务: 在浏览器中分别以 严格模式 和 非严格模式 测试 call、apply、bind方式调用函数